package SegundaAula;

import java.util.Scanner;

public class OperacaoComBinario {

	public static final int SISTEMA = 2; // Sistema binário

	public static String somaBinario(String bin1, String bin2) {
		String resultadoInvertido = "";
		int num1, num2;
		boolean vaiUm = false;
		for (int i = bin1.length() - 1; i >= 0; i--) {
			num1 = Integer.parseInt(bin1.substring(i, i + 1));
			num2 = Integer.parseInt(bin2.substring(i, i + 1));
			if (num1 + num2 == 2) {
				if (vaiUm) {
					resultadoInvertido += "1";
				} else {
					resultadoInvertido += "0";
					vaiUm = true;
				}
			} else if (num1 + num2 == 1) {
				if (vaiUm) {
					resultadoInvertido += "0";
				} else {
					resultadoInvertido += "1";
				}
			} else if (resultadoInvertido.length() < 8) {
				if (vaiUm) {
					resultadoInvertido += "1";
					vaiUm = false;
				} else {
					resultadoInvertido += "0";
				}
			}
		}

		return inverteString(resultadoInvertido);
	}

	public static String inverteString(String str) {
		String resultado = "";
		for (int j = str.length() - 1; j >= 0; j--) {
			resultado += str.charAt(j);
		}
		return resultado;
	}

	public static String complementoDeDois(String bin) {
		String valor = "";
		boolean naoAchou1 = true;

		for (int i = bin.length() - 1; i >= 0; i--) {
			if (bin.charAt(i) == '0') {
				if (naoAchou1) {
					valor += '0';
				} else {
					valor += '1';
				}
			}
			if (bin.charAt(i) == '1') {
				if (naoAchou1) {
					valor += '1';
					naoAchou1 = false;
				} else {
					valor += '0';
				}
			}
		}
		return inverteString(valor);
	}

	public static String decimal_Binario(int num) {
		String resultadoInvertido = "";

		while (num / SISTEMA > 1) {
			resultadoInvertido += num % SISTEMA;
			num /= SISTEMA;
		}
		resultadoInvertido += num % SISTEMA;
		resultadoInvertido += num / SISTEMA;

		while (resultadoInvertido.length() < 8) {
			resultadoInvertido += "0";
		}
		return inverteString(resultadoInvertido);
	}

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		String bin1, bin2;

		System.out.println("Entrada(dois numeros e uma operacao): ");
		String[] entradas = s.nextLine().split(" ");

		if (entradas.length != 3) {
			System.err.println("Entrada invalida.");
			System.exit(1);
		}

		int num1 = Integer.parseInt(entradas[0]);
		int num2 = Integer.parseInt(entradas[1]);

		bin1 = num1 < 0 ? complementoDeDois(decimal_Binario(num1 * -1))
				: decimal_Binario(num1);
		bin2 = num2 < 0 ? complementoDeDois(decimal_Binario(num2 * -1))
				: decimal_Binario(num2);
		
		if (entradas[2].equals("-")) {
			bin2 = complementoDeDois(bin2);
			System.out.println(somaBinario(bin1, bin2) + " " + (num1 - num2));
		} else if (entradas[2].equals("+")) {
			System.out.println(somaBinario(bin1, bin2) + " " + (num1 + num2));
		} else {
			System.out.println("Operacao Invalida.");
		}
	}

}
